Dynamically discovering devices and web services on a computer network is a common problem, especially in networks where devices are regularly coming and going, for example, networks with portable devices. The problem lies both within recognizing a new devices added to the network and in identifying devices already connected to the network to the new devices. In general, the address (e.g., the internet protocol (IP) address) of each device must be known in order to connect with the device. If the address is written on the device or on an associated information document, this address can be manually recorded with the other devices on the network.
There are also a variety of methods or algorithms, generally called “discovery protocols,” for automatically solving this problem. WS-Discovery (WS-D) is becoming a popular one now, and there are a number of others that are in use. Although these methods describe how to discover devices on a network, the methods are often error-prone and quite difficult for developers to implement properly, especially for devices or services that want to be discovered.
There are many discovery protocols (e.g. Universal Plug and Play (UPnP), WS-D) that are all wire-line level protocol. Hence, these protocols define the format and sequence of messages being transported, but none defines a programming interface for an application that wants to embed such a discovery protocol, i.e., an application that wants to become discoverable or use discovery to find other discoverable components. As a result, an application designer is often required to design a library specifically for that protocol, which also often requires changing the program flow to encompass that specific protocol. Another concern is that changing the discovery protocol (e.g., from UPnP to WSDP) causes major rework for the application designer even if the functionality of the new discovery protocol is similar or identical to the old one.